﻿#define _CRT_SECURE_NO_WARNINGS

#include<stdio.h>

//字符串拷⻉
//写⼀个函数my_strcpy，实现拷⻉字符串的功能，假设给定⼀个字符数组a，再给定⼀个字符数组
//b，将字符串a中的内容拷⻉到字符串b中，拷⻉内容包含字符串末尾的 \0 字符。

//#include<string.h>
//void my_strcpy(char* des, const char* sour)
//{
//	while (*des++=*sour++)
//	{
//		;
//	}
//}
//int main()
//{
//	char a[] = {"abcdefg"};
//	char b[20] = {0};
//	my_strcpy(b, a);
//	//打印
//	printf(b);
//	return 0;
//}

//合并有序数组
//输⼊两个升序排列的序列，将两个序列合并为⼀个有序序列并输出。
//输⼊包含三⾏，第⼀⾏包含两个正整数n, m，⽤空格分隔。n表⽰第⼆⾏第⼀个升序序列中数字的个
//数，m表⽰第三⾏第⼆个升序序列中数字的个数。其中
//1 <= n <= 30, 1 <= m <= 30 第⼆⾏包含 n 个整数，⽤空格分隔。
//第三⾏包含 m 个整数，⽤空格分隔。
//输出为⼀⾏，输出⻓度为n + m的升序序列，即⻓度为n的升序序列和⻓度为m的升序序列中的元素重
//新进⾏升序序列排列合并。

//int* merge_sort(int arr1[], int n, int arr2[], int m) 
//{
//
//
//	//return arr;
//}

int main()
{
	int arr1[30] = { 0 };
	int arr2[30] = { 0 };
	int n = 0;
	int m = 0;

	printf("请输入两个有序数列的个数：\n");
	scanf("%d %d",&n,&m);

	printf("请输入第一个有序数列：\n");
	int i;
	for ( i = 0; i < n; i++)
	{
		scanf("%d",&arr1[i]);
	}
	//丢弃字符
	int c;
	while ((c = getchar()) != '\n' && c != EOF) 
	{  
	}
	printf("请输入第二个有序数列：\n");
	for (i = 0; i < m; i++)
	{
		scanf("%d", &arr2[i]);
	}
	printf("\n");

	//合并升序排列
	
	int arr3[60] = { 0 };
	i = 0;
	int j= 0;
	int k= 0;
	
	while (i<n&&j<m)
	{
		if (arr1[i] < arr2[j])
		{
			arr3[k] = arr1[i];
			k++;
			i++;
		}
		else
		{
			arr3[k] = arr2[j];
			k++;
			j++;
		}
	}
	//判断i是否越界
	if (i == n)
	{
		while (j<m)
		{
			arr3[k] = arr2[j];
			k++;
			j++;
		}
	}
	//判断j是否越界
	if (j == m)
	{
		while (i < m)
		{
			arr3[k] = arr2[i];
			k++;
			i++;
		}
	}
	for (i = 0; i < n+m; i++)
	{
		printf("%d ", arr3[i]);
	}
	return 0;
}
